맨위로가기

ICO (파일 포맷)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

ICO는 윈도우 운영체제에서 사용되는 아이콘 파일 포맷이다. 윈도우 1.0에서 처음 도입되었으며, 32x32 픽셀 크기의 흑백 이미지를 지원했다. 이후 윈도우 버전의 발전에 따라 다양한 크기, 색상, 투명도를 지원하게 되었으며, 윈도우 XP부터는 32비트 색상과 알파 채널을 통한 투명 효과를, 윈도우 비스타부터는 256x256 픽셀 크기의 32비트 색상 아이콘과 PNG 압축을 지원한다. ICO 파일은 아이콘의 크기, 색상, 투명도 정보를 담고 있으며, 파일 구조는 ICONDIR 구조체와 ICONDIRENTRY 구조체, 이미지 데이터로 구성된다. 아이콘 및 커서 리소스는 PE 파일 내 리소스로 구성되며, 아이콘 라이브러리는 여러 개의 아이콘을 묶어 .ICL 확장자로 저장한다.

더 읽어볼만한 페이지

  • 아이콘 - 비잔틴 성상파괴운동
    비잔틴 성상파괴운동은 7세기부터 9세기까지 비잔틴 제국에서 성상 숭배를 둘러싸고 발생한 종교적, 정치적 논쟁과 갈등의 시기로, 레오 3세의 성상 파괴 명령으로 본격화되어 두 차례의 시대를 거치며 제국 사회에 큰 영향을 미쳤고, 성상 숭배 복원 후 비잔틴 미술과 동서 교회 관계에 변화를 가져왔다.
  • 아이콘 - 옥시즌 프로젝트
    옥시즌 프로젝트는 KDE 4 데스크톱 환경의 디자인과 사용자 경험 개선을 목표로 안정성, 성능 향상, 사용자 인터페이스 개선에 중점을 두어 개발되었으며, 여러 버전 업데이트를 거치면서 파일 관리자, 데스크톱 환경, 디자인, 시스템 성능 등의 개선과 안정화에 집중했다.
  • 마이크로소프트 윈도우 멀티미디어 기술 - 윈도우 디스플레이 드라이버 모델
    윈도우 비스타부터 도입된 윈도우 디스플레이 드라이버 모델(WDDM)은 성능 향상, 안정성, 새로운 기술 지원을 목표로 개발된 디스플레이 드라이버 아키텍처로, 가상화된 비디오 메모리, GPU 스케줄링, 프로세스 간 Direct3D 표면 공유, 향상된 오류 허용성 등의 특징을 가지며 데스크톱 윈도우 관리자(DWM)를 통한 합성 데스크톱 환경 구현에 필수적이다.
  • 마이크로소프트 윈도우 멀티미디어 기술 - 윈도우 미디어 플레이어
    윈도우 미디어 플레이어는 마이크로소프트에서 개발하여 윈도우 운영 체제에서 오디오, 비디오, 이미지 파일을 재생하는 데 사용되는 미디어 플레이어 응용 프로그램으로, 초기 버전은 '미디어 플레이어'라는 이름으로 출시되어 다양한 기능 추가 및 플랫폼 확장을 거쳤으나 현재는 대부분 지원이 중단되었고, 유럽 연합 경쟁법 위반 사건으로 인해 없는 버전도 출시되었다.
  • 그래픽 파일 포맷 - JPEG
    JPEG은 정지 화상의 디지털 압축 및 코딩을 위한 국제 표준이자 이를 만든 위원회의 이름으로, 1992년 최초 표준 발표 이후 웹 환경에서 널리 사용되는 이미지 형식이 되었다.
  • 그래픽 파일 포맷 - BMP 파일 포맷
    BMP 파일 포맷은 마이크로소프트에서 정의한 다양한 색상 깊이를 가진 컬러 비트맵 표현 방식으로, 장치 독립 비트맵이라고도 불리며, BMP 헤더, 비트맵 정보, 색 팔레트, 비트맵 데이터 등으로 구성되어 높은 호환성을 가지지만 압축을 거의 하지 않아 파일 크기가 큰 편이다.
ICO (파일 포맷) - [IT 관련 정보]에 관한 문서
파일 포맷 정보
파일 확장자.ico
MIME 형식image/x-icon (자세한 내용은 MIME 타입 참고)
유니폼 타입 식별자com.microsoft.ico
소유자마이크로소프트
장르컴퓨터 아이콘용 그래픽 파일 포맷
컨테이너 포맷BMPPNG
확장 포맷CUR
CUR 파일 포맷 정보
파일 확장자.cur
유니폼 타입 식별자com.microsoft.cur
소유자마이크로소프트
장르마우스 커서용 그래픽 파일 포맷
컨테이너 포맷BMP
확장 대상ICO

2. 역사

윈도우 1.0에서 처음 도입된 아이콘은 32×32 픽셀 크기의 흑백 이미지였다.[2] 윈도우 3.0에서는 16색 아이콘 지원이 추가되었다.

Win32는 최대 1670만 색상 (TrueColor) 및 최대 256×256 픽셀 크기의 아이콘 이미지 저장을 지원하기 시작했다.[3] 윈도우 95는 새로운 장치 독립 비트맵 (DIB) 엔진을 도입했으며,[4] 256색이 기본 아이콘 색상 깊이였다. 레지스트리 값을 수정하거나[3][5] Microsoft Plus! for Windows 95를 구입하여 65535 색상 (Highcolor) 아이콘을 활성화할 수 있었다. ''Shell Icon Size'' 값을 사용하면 32×32 아이콘 대신 더 큰 아이콘을, ''Shell Small Icon Size'' 값을 사용하면 16×16 아이콘 대신 사용자 지정 크기를 사용할 수 있었다.[3] 따라서 단일 아이콘 파일은 1×1 픽셀에서 256×256 픽셀까지 (비정사각형 크기 포함) 2 (거의 사용되지 않음), 16, 256, 65535 또는 1670만 색상의 모든 크기의 이미지를 저장할 수 있었다. 작업 표시줄의 알림 영역은 윈도우 Me까지 기본적으로 16색 아이콘으로 제한되었으며, 윈도우 Me에서 하이 컬러 아이콘을 지원하도록 업데이트되었다.

윈도우 XP는 32비트 색상 (1670만 색상 및 8비트 알파 채널 투명도) 아이콘 이미지를 지원하여 그림자, 안티앨리어싱, 유리와 같은 효과와 같은 반투명 영역을 아이콘에 그릴 수 있게 되었다. 윈도우 탐색기에서 기본적으로 48x48 픽셀 아이콘을 사용한다. Microsoft는 Windows XP에 대해 최대 48×48 픽셀의 아이콘 크기만 권장했다.[6]

윈도우 비스타는 256×256 픽셀 32비트 색상 아이콘과[14] 압축된 PNG 형식에 대한 완벽한 지원을 추가했다. Microsoft는 ICO 파일의 모든 32비트 색상 256×256 아이콘을 PNG 형식으로 저장하여 파일의 전체 크기를 줄이는 것을 권장한다.

3. 아이콘 크기, 색 깊이 및 투명도

윈도우 아이콘은 초기 윈도우 1.0에서 32x32 픽셀 크기에 흑백으로 지원되었다.[2] 윈도우 3.0부터는 16색을 지원하기 시작했다. 이후 윈도우 버전이 발전하면서 다양한 크기와 색 깊이의 아이콘을 지원하게 되었다.

윈도우 XP 이전에는 아이콘 이미지 크기가 1x1 픽셀부터 255x255 픽셀까지 가능했으며, 색 깊이는 1비트, 4비트, 8비트, 16비트, 24비트를 지원했다. 윈도우 95에서는 레지스트리 설정을 통해 65,535색(Highcolor) 아이콘을 활성화할 수 있었다. 윈도우 작업 표시줄의 알림 영역은 윈도우 Me까지 기본적으로 16색 아이콘으로 제한되었으나, 윈도우 Me부터 하이 컬러 아이콘을 지원하게 되었다.

윈도우 XP에서는 32비트 색 깊이(1670만 색상 및 8비트 알파 채널)를 지원하여 아이콘에 반투명 영역, 그림자, 안티 앨리어싱 효과를 구현할 수 있게 되었다.[3] 윈도우 XP는 기본적으로 윈도우 탐색기에서 48x48 픽셀 아이콘을 사용하며, 최대 256x256 크기의 아이콘도 사용할 수 있지만, 마이크로소프트는 48x48 픽셀까지만 권장했다.[6]

아이콘 이미지 데이터는 AND 비트맵과 XOR 비트맵으로 구성된다. AND 비트맵은 배경에 대해 아이콘 이미지가 덮어씌워지는지 여부를 지정하고, XOR 비트맵은 이를 바탕으로 XOR 연산을 통해 덮어씌워 투명한 부분을 만드는 데 사용된다.

3. 1. 윈도우 비스타 권장 아이콘 크기

윈도우 비스타는 256x256 픽셀 크기의 아이콘 이미지와 PNG 형식을 지원한다. PNG 형식은 투명성 데이터를 직접 사용하므로, 일반적인 AND 비트맵이나 XOR 비트맵은 필요하지 않다. 윈도우 비스타에서는 256x256 픽셀 아이콘을 32비트 색 심도로만 사용할 수 있으며, 파일 크기를 줄이기 위해 PNG 형식을 사용하는 것이 좋다.[14]

윈도우 비스타는 화면 표시를 확대하거나 축소할 수 있기 때문에, 아이콘 파일에 다양한 크기의 아이콘을 저장하는 것이 권장된다.[7][8] 마이크로소프트가 권장하는 표준 아이콘 크기는 다음과 같다.

크기색 농도압축 여부
256×25632비트 색PNG 압축
256×2568비트 색PNG 압축
256×2564비트 색PNG 압축
48×4832비트 색압축되지 않음
48×488비트 색압축되지 않음
48×484비트 색압축되지 않음
32×3232비트 색압축되지 않음
32×328비트 색압축되지 않음
32×324비트 색압축되지 않음
16×1632비트 색압축되지 않음
16×168비트 색압축되지 않음
16×164비트 색압축되지 않음


4. 파일 구조

ICO/CUR 파일은 ICONDIR ("아이콘 디렉터리") 구조와 각 이미지에 대한 ICONDIRENTRY 구조, 그리고 모든 이미지 비트맵 데이터의 연속 블록으로 구성된다. 모든 값은 리틀 엔디안 바이트 순서로 표현된다.[3]

구분설명
아이콘 헤더ICO/CUR 파일에 대한 포괄적인 정보를 저장한다.
디렉터리 #1첫 번째 이미지에 대한 포괄적인 정보를 저장한다.
\vdots
디렉터리 #n마지막 이미지에 대한 포괄적인 정보.
아이콘 #1첫 번째 이미지의 실제 데이터. AND/XOR 비트맵 형식 또는 PNG 형식
\vdots
아이콘 #n마지막 아이콘 이미지 데이터



32비트 미만의 색상 깊이를 가진 이미지는 색상 마스크("XOR 마스크")와 불투명도 마스크("AND 마스크")로 구성된 단일 이미지로 인코딩된다.[6][3] XOR 마스크는 비트맵 데이터 내에서 AND 마스크 앞에 있어야 한다. AND 마스크는 픽셀당 1비트이며, 어떤 픽셀이 완전히 투명(1)이고 어떤 픽셀이 완전히 불투명(0)인지 지정한다. XOR 마스크는 각 픽셀에 대한 숫자 색상 또는 팔레트 값을 지정한다. ICO/CUR 파일의 ICONDIRENTRY 구조의 이미지 높이는 (마스크가 합성된 후) 의도된 이미지 치수를 가지는 반면, BMP 헤더의 높이는 두 마스크 이미지를 결합한 높이(합성되기 전)를 가진다. 따라서 마스크는 각각 동일한 치수를 가져야 하며 BMP 헤더에 지정된 높이는 ICONDIRENTRY 구조에 지정된 높이의 정확히 두 배여야 한다.[12]

32비트 이미지(32비트 BITMAPINFOHEADER 형식 BMP 이미지 포함[13])는 24비트 이미지에 알파 합성을 위한 8비트 채널을 추가한 것이다. 윈도우 XP 이상 버전은 ICO/CUR 파일에 24비트 버전의 이미지가 제공되지 않는 경우 알파 채널을 기반으로 AND 마스크를 구성하여(이미지에 없는 경우) 트루 컬러 모드 미만에서 32비트 이미지를 사용한다. 그러나 이전 버전의 Windows는 이미지에 AND 마스크가 제공되지 않으면 100% 불투명도를 가진 모든 픽셀을 해석한다.[3]

AND 마스크에서, 비트맵의 픽셀 배열과 마찬가지로, 각 행의 길이를 4바이트의 배수로 만들기 위해 패딩 바이트를 행의 끝에 추가해야 한다.[3] 예를 들어 8x8 픽셀 비트맵의 AND 마스크는 1바이트의 데이터와 3바이트의 패딩을, 16x16 비트맵의 AND 마스크는 2바이트의 데이터와 2바이트의 패딩을, 32x32 비트맵의 AND 마스크는 4바이트의 데이터와 패딩이 없을 것이다.

4. 1. 헤더

ICO 또는 CUR 파일은 ICONDIR ("아이콘 디렉토리") 구조로 구성되며, 파일 내 각 이미지에 대한 ICONDIRENTRY 구조를 포함한다. 그 뒤에는 모든 이미지 비트맵 데이터의 연속 블록이 오는데, 이는 Windows BMP 형식(BITMAPFILEHEADER 구조 제외)이거나 전체가 저장된 PNG 형식일 수 있다.[3]

ICONDIR 구조체
오프셋#크기목적
02예약됨. 항상 0이어야 함.
22이미지 유형 지정: 아이콘(.ICO) 이미지는 1, 커서(.CUR) 이미지는 2. 다른 값은 유효하지 않음.
42파일 내 이미지 수 지정.



크기는 6바이트이다.

4. 2. 이미지 디렉터리 구조

ICO 또는 CUR 파일은 파일 내 각 이미지에 대한 ICONDIRENTRY 구조를 포함하는 ICONDIR ("아이콘 디렉토리") 구조로 구성되며, 그 뒤에는 모든 이미지 비트맵 데이터의 연속 블록이 온다. 이 블록은 Windows BMP 형식(BITMAPFILEHEADER 구조 제외)이거나 PNG 형식일 수 있다.[3]

ICONDIRENTRY 구조체는 다음과 같다.

ICONDIRENTRY 구조
오프셋#크기목적
01픽셀 단위로 이미지 너비를 지정한다. 0에서 255 사이의 숫자일 수 있다. 값 0은 이미지 너비가 256 픽셀임을 의미한다.[14]
11픽셀 단위로 이미지 높이를 지정한다. 0에서 255 사이의 숫자일 수 있다. 값 0은 이미지 높이가 256 픽셀임을 의미한다.[14]
21색상 팔레트의 색상 수를 지정한다. 이미지가 색상 팔레트를 사용하지 않는 경우 0이어야 한다.
31예약됨. 0이어야 한다.
42
62
84바이트 단위로 이미지 데이터의 크기를 지정한다.
124ICO/CUR 파일 시작 부분에서 BMP 또는 PNG 데이터의 오프셋을 지정한다.



ICONDIRENTRY 구조체의 크기는 16바이트이다.

4. 3. 이미지 데이터

이미지 데이터는 BMP 형식 또는 PNG 형식으로 저장될 수 있다.

'''BMP 형식'''

BMP 형식으로 이미지를 저장할 때는, BITMAPFILEHEADER 구조를 제외한다.[3] BMP 이미지의 높이는 이미지 디렉터리에 선언된 높이의 두 배인데, 실제 이미지 데이터가 두 부분으로 구성되기 때문이다. 즉, 실제 이미지 바로 뒤에 이미지를 그릴 픽셀을 결정하는 데 사용되는, 이미지와 동일한 크기의 1비트 마스크가 있다.

마스크는 DWORD(32비트)에 맞춰야 하며 0으로 채워야 한다. 0 픽셀은 '이미지의 해당 픽셀을 그린다'를 의미하고, 1은 '이 픽셀을 무시한다'를 의미한다. 픽셀 색상은 24비트 및 32비트 버전(색상표가 없음)의 경우 명시적으로 지정되며, BITMAPINFOHEADER 뒤에 오는 4바이트(BGRA) 색상표에서 다른 깊이(1, 2, 4, 8, 16)의 경우 인덱싱된다.

1비트의 경우 일반적으로 두 가지 색상은 #00000000 및 #00FFFFFF이며 A 채널은 무시된다. 1, 2, 4, 8 및 16비트의 픽셀 데이터는 바이트 및 DWORD 정렬로 패킹된다. 24비트 이미지는 B G R 삼중으로 저장되지만 DWORD로 정렬되지 않는다. 32비트 이미지는 B G R A 쿼드로 저장된다.

원래 ICO와 CUR는 모노크롬 디스플레이에서 사용하도록 제작되었으며, 공식은 (기존 AND 마스크) XOR 이미지 였지만, 컬러 화면에서는 커서가 A 채널 블렌딩을 사용하여 구성되고 마스크는 포함되거나 제외되는 픽셀을 결정하는 데 사용된다.

'''PNG 형식'''

PNG 형식으로 이미지를 저장하는 경우, BITMAPINFOHEADER가 없으며 대신 PNG 이미지의 전체 내용이 사용된다.[7]

PNG 이미지를 ICO 형식 이미지에서 읽는 기능은 Windows Vista에서 도입되었다.[7] PNG 이미지는 표준 Windows BMP 형식 이미지와 동일한 방식으로 이미지에 저장할 수 있으며, PNG 이미지가 파일 헤더와 함께 전체적으로 저장되어야 하고 32bpp ARGB 형식이어야 한다는 점만 다르다.[7]

5. 아이콘 및 커서 리소스

PE (EXE 또는 DLL) 파일의 아이콘과 커서는 리소스로 구성된다.[18] RT_GROUP_ICON영어, RT_GROUP_CURSOR영어, RT_ICON영어, RT_CURSOR영어 형식의 리소스를 사용한다.

RT_GROUP_ICON영어 및 RT_GROUP_CURSOR영어 리소스는 NEWHEADER영어 구조체와 하나 이상의 RESDIR영어 구조체를 포함한다. 이 구조체들은 ICO/CUR 파일의 해당 ICONDIR영어 및 ICONDIRENTRY영어 구조체와 형식이 거의 같다. 주요 차이점은 RESDIR영어 구조체의 마지막 멤버가 파일 내 이미지 오프셋 대신 RT_ICON영어/RT_CURSOR영어의 2바이트 리소스 식별자를 포함한다는 것이다.

NEWHEADER영어/RESDIR영어 구조체는 많은 소스에서 GRPICONDIR영어/GRPICONDIRENTRY영어로도 언급된다.[19]

[https://learn.microsoft.com/windows/win32/menurc/newheader NEWHEADER] 구조체
오프셋#크기목적
02예약됨. 항상 0이어야 한다.
22리소스 유형을 지정한다: 아이콘 리소스의 경우 1, 커서 리소스의 경우 2. 다른 값은 유효하지 않다.
42NEWHEADER영어 구조체 바로 뒤에 오는 RESDIR영어 구조체의 수를 지정한다.



[https://learn.microsoft.com/windows/win32/menurc/resdir RESDIR] 구조체
오프셋#크기목적
0아이콘의 경우: 1* 이미지 너비를 픽셀 단위로 지정한다. 0에서 255 사이의 숫자일 수 있다. 값 0은 이미지 너비가 256 픽셀임을 의미한다.[14]
커서의 경우: 2
1아이콘의 경우: 1* 이미지 높이를 픽셀 단위로 지정한다. 0에서 255 사이의 숫자일 수 있다. 값 0은 이미지 너비가 256 픽셀임을 의미한다.[14]
커서의 경우: 2
21* 아이콘 리소스의 경우: 색상 팔레트의 색상 수를 지정한다. 이미지에서 색상 팔레트를 사용하지 않는 경우 0이어야 한다.
31* 아이콘 리소스의 경우: 예약됨. 0이어야 한다.
42색상 평면을 지정한다. 0 또는 1이어야 한다.[15]
62픽셀당 비트 수를 지정한다.[17]
84리소스 크기를 바이트 단위로 지정한다.
122RT_ICON영어 또는 RT_CURSOR영어 리소스의 고유한 순서 식별자이다.



RT_ICON영어 및 RT_CURSOR영어 리소스는 ICO 파일과 동일한 이미지 데이터 형식을 가지며 PNG 이미지도 저장할 수 있다. 또한 RT_CURSOR영어 리소스 데이터의 처음 4바이트에는 두 개의 WORD(16비트) 값으로 커서 핫스팟 데이터가 포함되어 있다(핫스팟 데이터가 ICONDIRENTRY영어 구조체에 포함된 CUR 파일과 대조).[20]

6. 아이콘 라이브러리

아이콘 라이브러리는 윈도우 아이콘들을 묶는 방법이다. 일반적으로 .ICL 확장자를 가진 16비트 새 실행 파일(NE) 또는 32비트 PE 바이너리 파일이며, 묶여진 아이콘은 아이콘 리소스이다.[21] 윈도우 비스타 이후 버전은 16비트 (새 실행 파일) 파일에서 아이콘을 볼 수 없다.[21]

참조

[1] 웹사이트 MIME Sniffing Standard http://mimesniff.spe[...] WHATWG 2014-01-17
[2] 웹사이트 Operating System Interface Design Between 1981-2009 http://www.webdesign[...] 2011-06-06
[3] 웹사이트 Icons https://learn.micros[...] Microsoft Corporation 2011-06-05
[4] 웹사이트 Windows 95 Architecture Components https://learn.micros[...] Microsoft Corporation 2011-06-06
[5] 웹사이트 Shell Icon BPP https://learn.micros[...] Microsoft Corporation 2011-06-06
[6] 웹사이트 Creating Windows XP Icons https://learn.micros[...] Microsoft Corporation 2022-11-27
[7] 웹사이트 The evolution of the ICO file format, part 4: PNG images https://devblogs.mic[...] 2022-11-27
[8] 웹사이트 Icons (Design basics) - Win32 apps https://learn.micros[...] 2021-02-09
[9] 웹사이트 image/vnd.microsoft.icon https://www.iana.org[...] 2014-01-03
[10] 웹사이트 IE9 RC Minor Changes List https://blogs.msdn.m[...] "[[MSDN Blogs]]" 2016-08-20
[11] 웹사이트 Windows Imaging Component - ICO Format Overview https://learn.micros[...]
[12] 웹사이트 The evolution of the ICO file format, part 2: Now in color! https://devblogs.mic[...] 2022-12-30
[13] 문서
[14] 문서
[15] 문서
[16] 웹사이트 Windows XP icon and cursor support https://support.micr[...] Microsoft 2005-11-18
[17] 문서
[18] 웹사이트 Resource File Formats - Win32 apps https://learn.micros[...] 2023-05-22
[19] 웹사이트 The format of icon resources https://devblogs.mic[...] 2023-05-20
[20] 웹사이트 LOCALHEADER structure - Win32 apps https://learn.micros[...] 2023-05-22
[21] 웹사이트 Windows Confidential - 16-Bit Icons Are So Passé https://learn.micros[...] 2022-11-27
[22] 문서
[23] 문서
[24] 문서
[25] 웹사이트 Icons (Design basics) - Win32 apps | Microsoft Docs https://docs.microso[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com